﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace WooCoo.ObjectModel
{
    /// <summary>
    /// 用于实体对象的数据状态跟踪
    /// </summary>
    public interface ITrackStatus
    {
        /// <summary>
        /// 如果对象数据或者字段,子对象数据发生改变,刚返回<see langword="true" />   
        /// </summary>
        /// <remarks>
        /// <para>
        /// 当对象数据发生改变,框架对改变做记录,认为该对象为'脏数据'.该值用于优化数据更新,
        /// 因为未发生改变的对象不需求更新到数据库中.所以新建对象都被认为是'脏数据'.
        /// 所有标记为删除的对象也被认为是'脏数据'.        
        /// </para><para>
        /// 一但对象数据提交到数据库中,'脏'标记就被清除,对象被认为未发生改变的.
        /// 新近从数据库读取的对象也是被认为未发生改变的        
        /// </para>
        /// </remarks>
        /// <returns>指示对象是否发生改变.</returns>
        bool IsDirty { get; }
        /// <summary>
        /// 如果对象数据或者字段，子对象可用，则返回True
        /// </summary>
        bool IsValid { get; }
        ///// <summary>
        ///// 标识对象是否为子对象。
        ///// </summary>
        //bool IsChild { get; }
        /// <summary>
        /// 清除脏对象标识
        /// </summary>
        void MarkClean();
    }
}
